谈 AOP
的通俗理解
最近在翻译Spring Framework 5.0.0.M3中文文档 ,看到AOP
时索性把自己的理解写写。
Spring的面向方面的编程(AOP
),国内大都说面向切面,其实我还是觉得面向方面最恰当,何解?那就扯一扯。
1. AOP
相关的概念
1) Aspect
:切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面;
2) Join point
:连接点,也就是可以进行横向切入的位置;
3) Advice
:通知,切面在某个连接点执行的操作(分为: Before advice
, After returning advice
, After throwing advice
, After (finally) advice
, Around advice
);
4) Pointcut
:切点,符合切点表达式的连接点,也就是真正被切入的地方;
这就好比一团面,都是一团白面,根据食谱的不同,我们做什么样的面食即可,厨师关心的是做法,而客人关心的是色香味,再进一步的说,我同样的做面方法,完全可以用不一样的面粉(白面,玉米面,荞麦面等等),由此便可抽象出面团便是所谓的切点,而面团的加工,比如加水,放鸡蛋,放油,盐等的各种加工便是面的前置方法Before advice
,将面团炸,煎,煮等做出成品来便是其后置方法After advice
,期间有所谓的环绕方法Around advice
,而客人的品评则是finally advice
中间出现问题了所造成的事件 After throwing advice
仅供理解,里面可能有不恰当的地方,但自己写代码的时注意即可,由此,这个做面的过程便是面向方面编程即所谓的一个切面(Aspect
)
而AOP
的核心思想所在便是要求程序员专注于自己的逻辑业务,而非这团面,得以更好的去处理各种问题,从本质上进行解耦。
最后,再贴上一段代码来做参考对比:
1 |
|